package applicationModels;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import modelo.Empleado;
import modelo.Excepcion;

import org.joda.time.LocalDate;
import org.uqbar.commons.utils.Observable;

import database.Tienda;

@Observable
public class ListadoExcepciones implements Serializable {
	
	private static final long serialVersionUID = 1L;
	private Set<TuplaEmpleadoExcepcion> resultados;
	private TuplaEmpleadoExcepcion excepcionSeleccionada;
	private LocalDate fechaCriterio;
	
	public ListadoExcepciones(){
		fechaCriterio=new LocalDate();
		this.buscar();
	}
			
	public TuplaEmpleadoExcepcion getExcepcionSeleccionada() {
		return excepcionSeleccionada;
	}

	public void setExcepcionSeleccionada(
			TuplaEmpleadoExcepcion excepcionSeleccionada) {
		this.excepcionSeleccionada = excepcionSeleccionada;
	}

	public LocalDate getFechaCriterio() {
		return fechaCriterio;
	}

	public void setFechaCriterio(LocalDate fechaCriterio) {
		this.fechaCriterio = fechaCriterio;
	}

	public List<TuplaEmpleadoExcepcion> getResultados() {
		return new ArrayList<TuplaEmpleadoExcepcion>(resultados);
	}

	public void buscar(){
		resultados = this.getTuplas();
	}
	
	private TreeSet<TuplaEmpleadoExcepcion> getTuplas(){
		TreeSet<TuplaEmpleadoExcepcion> tuplas = new TreeSet<TuplaEmpleadoExcepcion>();
		for(Empleado empleado:Tienda.getInstance().getEmpleados()){
			this.generarTuplas(empleado, tuplas);
		}
		return tuplas;
	}
	
	private void generarTuplas(Empleado empleado, TreeSet<TuplaEmpleadoExcepcion> excepciones){
		for(Excepcion excepcion:empleado.getExcepciones()){
			if(!excepcion.getFecha().isBefore(fechaCriterio)){
				excepciones.add(new TuplaEmpleadoExcepcion(empleado, excepcion));
			}
		}
	}
	
	public void quitarExcepcion(){
		excepcionSeleccionada.getEmpleado().quitarExcepcion(excepcionSeleccionada.getExcepcion());
		this.buscar();
		excepcionSeleccionada=null;
	}
	
}
